home *** CD-ROM | disk | FTP | other *** search
/ Freelog Special Edition 10 / FreelogHS10.iso / Buzz / Buzz_Advanced_Pack.exe / {app} / Dev / Overloader - SuperDonut SongInf / songinf.cpp < prev    next >
C/C++ Source or Header  |  2001-11-06  |  8KB  |  284 lines

  1. #include "../mdk/mdk.h"
  2. #include <windows.h>
  3. #include "resource.h"
  4. #include "songinfobase.h"
  5.  
  6. #pragma optimize ("awy", on) 
  7.  
  8. CMachineParameter const *pParameters[] = { NULL };
  9. CMachineAttribute const *pAttributes[] = { NULL };
  10.  
  11. #pragma pack(1)        
  12.  
  13. #pragma pack()
  14.  
  15.  
  16. CMachineInfo const MacInfo = 
  17. {
  18.     MT_EFFECT,
  19.     MI_VERSION,    
  20.     MIF_DOES_INPUT_MIXING|MIF_NO_OUTPUT,
  21.     0,                                        // min tracks
  22.     0,                                        // max tracks
  23.     0,                                        // numGlobalParameters
  24.     0,                                        // numTrackParameters
  25.     pParameters,
  26.     0,
  27.     pAttributes,
  28.     "SuperDonut SongInf",                                // name
  29.     "SongInf",                                // short name
  30.     "Edward L. Blake",                        // author
  31.     "&Song.Inf..."
  32. };
  33.  
  34. class mi;
  35.  
  36. HINSTANCE dllInstance;
  37. mi *g_mi;
  38.  
  39. class csinf : public CSongInfoHandler {
  40. public:
  41.     virtual void OpenSIDialog();
  42.     virtual char * GetSongInfoName() { return "SuperDonut SongInf"; }
  43.     virtual void GetTags(int tag_id, char *tagdata);
  44. public:
  45.     mi *pmi;
  46. };
  47.  
  48. class miex : public CMDKMachineInterfaceEx { };
  49.  
  50. class mi : public CMDKMachineInterface
  51. {
  52. public:
  53.     mi();
  54.     virtual ~mi();
  55.     virtual void Tick();
  56.     virtual void MDKInit(CMachineDataInput * const pi);
  57.     virtual bool MDKWork(float *psamples, int numsamples, int const mode);
  58.     virtual bool MDKWorkStereo(float *psamples, int numsamples, int const mode);
  59.     virtual void Command(int const i);
  60.     virtual void MDKSave(CMachineDataOutput * const po);
  61.     virtual char const *DescribeValue(int const param, int const value);
  62.  
  63.     virtual bool mi::OnDoubleClick(void *);
  64. public:
  65.     virtual CMDKMachineInterfaceEx *GetEx() { return &ex; }
  66.     virtual void OutputModeChanged(bool stereo) {}
  67.  
  68. public:
  69.     miex ex;
  70.     csinf csex; 
  71.     HWND buzzwindow;
  72. public:
  73.     char song_title[255];
  74.     char song_author[255];
  75.     char song_album[255];
  76.     char song_url[255];
  77.     char song_genre[255];
  78.     char song_other[255];
  79.     char song_description[4096];
  80.  
  81.     CMachine *ThisMachine;
  82. };
  83.  
  84.  
  85. mi::mi() { }
  86. mi::~mi() {
  87.     OEBSongInfo_Unload();
  88. }
  89.  
  90.  
  91. BOOL APIENTRY SongInfoStDialog(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
  92.  
  93. void mi::MDKInit(CMachineDataInput * const pi)
  94. {
  95.     char junkie[100];int junkie2;
  96.     SetOutputMode( true );    //    If true, the MDKWork will never be called, meaning that Buzz will convert a mono signal to
  97.                             //    stereo itself and call MDKWorkStereo insted.
  98.                             //    If false, MDKWork will be called in mono cases, and the output should be mono
  99.     csex.pmi = this;
  100.     buzzwindow = OEBSongInfo_GetBuzzWindow(pCB);
  101.     ThisMachine = pCB->GetThisMachine();
  102.     pCB->SetEventHandler(ThisMachine, DoubleClickMachine, (bool (CMachineInterface::*)(void *))OnDoubleClick, NULL);
  103.  
  104.     sprintf(song_title,"Untitled");
  105.     sprintf(song_author,"");
  106.     sprintf(song_album,"");
  107.     sprintf(song_url,"http://");
  108.     sprintf(song_genre,"");
  109.     sprintf(song_other,"");
  110.     sprintf(song_description,"<description here>");
  111.  
  112.     if (pi != NULL) {
  113.         pi->Read(junkie,45);
  114.         if (strncmp(junkie,"[BUZZ-MORE-SONG-INFORMATION===10][SUPRINFO10]",45) == 0) {
  115.             pi->Read(junkie,4);
  116.             pi->Read(junkie2);
  117.             pi->Read(song_title,255);
  118.             pi->Read(junkie,4);
  119.             pi->Read(junkie2);
  120.             pi->Read(song_author,255);
  121.             pi->Read(junkie,4);
  122.             pi->Read(junkie2);
  123.             pi->Read(song_album,255);
  124.             pi->Read(junkie,4);
  125.             pi->Read(junkie2);
  126.             pi->Read(song_url,255);
  127.             pi->Read(junkie,4);
  128.             pi->Read(junkie2);
  129.             pi->Read(song_genre,255);
  130.             pi->Read(junkie,4);
  131.             pi->Read(junkie2);
  132.             pi->Read(song_other,255);
  133.             pi->Read(junkie,4);
  134.             pi->Read(junkie2);
  135.             pi->Read(song_description,4096);
  136.             pi->Read(junkie,10);
  137.         } else {
  138.             MessageBox(buzzwindow,"This is a unknown SongInfo format, you might need to upgrade to extract this SongInfo data.\nNOTE: Saving this song might erase the data that was loaded in this SongInfo machine.","CyanPhase SongInfo",MB_OK);
  139.             while (true) {
  140.                 pi->Read(junkie,1);
  141.                 if (strncmp(junkie,"[",1) == 0) {
  142.                     pi->Read(junkie,9);
  143.                     if (strncmp(junkie,"INFOENDS]",9) == 0) {
  144.                         break;
  145.                     }
  146.                 }
  147.             }
  148.         }
  149.     };
  150.     OEBSongInfo_Load(&csex);
  151. }
  152.  
  153. void mi::MDKSave(CMachineDataOutput * const po) {
  154.     po->Write("[BUZZ-MORE-SONG-INFORMATION===10][SUPRINFO10]",45);
  155.     po->Write("TITL",4); po->Write((int)(255));
  156.     po->Write(song_title,255);
  157.     po->Write("AUTH",4); po->Write((int)(255));
  158.     po->Write(song_author,255);
  159.     po->Write("ALBM",4); po->Write((int)(255));
  160.     po->Write(song_album,255);
  161.     po->Write("URL ",4); po->Write((int)(255));
  162.     po->Write(song_url,255);
  163.     po->Write("GNRE",4); po->Write((int)(255));
  164.     po->Write(song_genre,255);
  165.     po->Write("OTHR",4); po->Write((int)(255));
  166.     po->Write(song_other,255);
  167.     po->Write("DESC",4); po->Write((int)(4096));
  168.     po->Write(song_description,4096);
  169.     po->Write("[INFOENDS]",10);
  170. }
  171. void mi::Tick() { }
  172. bool mi::MDKWork(float *psamples, int numsamples, int const mode) { return false; }
  173. bool mi::MDKWorkStereo(float *psamples, int numsamples, int const mode) { return false; }
  174.  
  175. BOOL WINAPI DllMain ( HANDLE hModule, DWORD fwdreason, LPVOID lpReserved ) {
  176.     switch (fwdreason) {
  177.     case DLL_PROCESS_ATTACH: {
  178.         dllInstance = (HINSTANCE) hModule;
  179.         LoadOEBForSongInfo(dllInstance);
  180.         break;
  181.     }
  182.     case DLL_THREAD_ATTACH: break;
  183.     case DLL_THREAD_DETACH: break;
  184.     case DLL_PROCESS_DETACH: break;
  185.     }
  186.     return TRUE;
  187. }
  188.  
  189. BOOL APIENTRY SongInfoDialog(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  190.  
  191.     switch(uMsg) {
  192.     case WM_INITDIALOG:
  193.     {
  194.         SetDlgItemText(hDlg,IDC_SONGTITLE,g_mi->song_title);
  195.         SetDlgItemText(hDlg,IDC_SONGAUTHOR,g_mi->song_author);
  196.         SetDlgItemText(hDlg,IDC_SONGALBUM,g_mi->song_album);
  197.         SetDlgItemText(hDlg,IDC_SONGURL,g_mi->song_url);
  198.         SetDlgItemText(hDlg,IDC_GENRESTYLE,g_mi->song_genre);
  199.         SetDlgItemText(hDlg,IDC_OTHERSTUFF,g_mi->song_other);
  200.         SetDlgItemText(hDlg,IDC_SONGDESCRIPTION,g_mi->song_description);
  201.         return 1;
  202.     }
  203.         break;
  204.     case WM_SHOWWINDOW: { return 1; } break;
  205.     case WM_CLOSE: { EndDialog (hDlg, TRUE); } break;
  206.     case WM_COMMAND: {
  207.         switch ( LOWORD (wParam))
  208.         {
  209.         case IDOK:
  210.             GetDlgItemText(hDlg,IDC_SONGTITLE,g_mi->song_title,255);
  211.             GetDlgItemText(hDlg,IDC_SONGAUTHOR,g_mi->song_author,255);
  212.             GetDlgItemText(hDlg,IDC_SONGALBUM,g_mi->song_album,255);
  213.             GetDlgItemText(hDlg,IDC_SONGURL,g_mi->song_url,255);
  214.             GetDlgItemText(hDlg,IDC_GENRESTYLE,g_mi->song_genre,255);
  215.             GetDlgItemText(hDlg,IDC_OTHERSTUFF,g_mi->song_other,255);
  216.             GetDlgItemText(hDlg,IDC_SONGDESCRIPTION,g_mi->song_description,4096);
  217.             EndDialog(hDlg, TRUE);
  218.             return 1;
  219.         case IDCANCEL:
  220.             EndDialog(hDlg, TRUE);
  221.             return 1;
  222.         default:
  223.             return 0;
  224.         }
  225.     }
  226.         break;
  227.     default:
  228.         break;
  229.     }
  230.     return 0;
  231. }
  232.  
  233. void csinf::OpenSIDialog() { 
  234.     g_mi=pmi;
  235.     DialogBox(dllInstance, MAKEINTRESOURCE (IDD_SONGINFO), pmi->buzzwindow, (DLGPROC) &SongInfoDialog);
  236. }
  237.  
  238. void csinf::GetTags(int tag_id, char *tagdata) {
  239.     switch (tag_id) {
  240.     case 0: sprintf(tagdata, pmi->song_title); break;
  241.     case 1: sprintf(tagdata, pmi->song_author); break;
  242.     case 2: sprintf(tagdata, pmi->song_album); break;
  243.     case 3: sprintf(tagdata, pmi->song_genre); break;
  244.     case 4: sprintf(tagdata, pmi->song_other); break;
  245.     case 5: sprintf(tagdata, pmi->song_description); break;
  246.     case 6: sprintf(tagdata, ""); break;
  247.     case 7: sprintf(tagdata, ""); break;
  248.     case 8: sprintf(tagdata, pmi->song_url); break;
  249.     case 9: sprintf(tagdata, pmi->song_author); break;
  250.     case 10: sprintf(tagdata, ""); break;
  251.     case 11: sprintf(tagdata, ""); break;
  252.     case 12: sprintf(tagdata, pmi->song_author); break;
  253.     case 13: sprintf(tagdata, "Overloaded Buzz"); break;
  254.     case 14: sprintf(tagdata, pmi->song_author); break;
  255.     default: sprintf(tagdata, "");
  256.     }
  257. }
  258.  
  259. void mi::Command(int const i)
  260. {
  261.     switch (i)
  262.     {
  263.     case 0:
  264.         g_mi=this;
  265.         DialogBox(dllInstance, MAKEINTRESOURCE (IDD_SONGINFO), buzzwindow, (DLGPROC) &SongInfoDialog);
  266.         break;
  267.     default:
  268.         break;
  269.     }
  270. }
  271.  
  272. bool mi::OnDoubleClick(void *) {
  273.     g_mi=this;
  274.     DialogBox(dllInstance, MAKEINTRESOURCE (IDD_SONGINFO), buzzwindow, (DLGPROC) &SongInfoDialog);
  275.     return true;
  276. }
  277.  
  278. char const *mi::DescribeValue(int const param, int const value) { return NULL; }
  279.  
  280. #pragma optimize ("", on) 
  281.  
  282. DLL_EXPORTS
  283.  
  284.